//********************************************************************************************************
//*程 序 作 者 ： 杨 刘 佳
//*完 成 日 期 ： 2 0 2 4 年 3 月 7 日
//*章 节 ： 第一章
//*题  目 ： 编写一个程序，求一组整数的中值
//********************************************************************************************************

#include<iostream>
#include<iomanip>
using namespace std;

int main()
{
	int data[1000000] = {0};
	int data_sum = 0;
	float result = 0;
	
	float find_median(int *digit, int sum);//实现求一组整数的中值的函数
	
	cout << "请输入一组整数（用空格隔开,若想结束输入，请按回车键）：" << endl;
	
	for(int i = 0; ; i++)
	{
		cin >> data[i];
		if(cin.get() == '\n')
		break;
		data_sum++;
	}
	
	result = find_median(data, data_sum);
	
	cout << "改组整数的中值为：" << result;
	
	return 0;	
}

//********************************************************************************************************
//定义一个子函数，实现对整数升序排列并找出其中值的功能
//返回值为最终找出的中值
//********************************************************************************************************
float find_median(int *digit, int sum)
{
	float median = 0;
	int min_index = 0;
	int exchange = 0;
	
	for(int i = 0; i < sum - 1; i++)
	{
		min_index = i;
		for(int j = i + 1; j < sum; j++)
		if(*(digit + min_index) > *(digit + j))
		min_index = j;
		{
			exchange = *(digit + i);
			*(digit + i) = *(digit + min_index);
			*(digit + min_index) = exchange;
		}
	}//利用选择法进行升序排列
	
	if((sum / 2) * 2 == sum)
	median = (*(digit + (sum / 2)) + *(digit + (sum / 2 + 1))) / 2;
	else
	median = *(digit + (sum + 1) / 2);
	
	return median;
}